package com.allwees.core.common.util.json;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.util.TypeUtils;

import java.util.List;

/**
 * JsonUtil JSON 工具类
 * Date: 2018/8/12
 * Time: 14:31
 *
 * @author tianye
 */
public final class JsonUtil {
    public static final String DEFAULT_DATA_FORMAT = "yyyy-MM-dd HH:mm:ss";

    static {
        //Fastjson按字段实际大小写输出
		TypeUtils.compatibleWithFieldName =true;
    }

    private JsonUtil() {
    }

    /**
     * 将json通过类型转换成对象
     * <p/>
     * <pre class="code">
     * {@link JsonUtil JsonUtil}.fromJson("{\"username\":\"username\", \"password\":\"password\"}", User.class);
     * </pre>
     *
     * @param json  json字符串
     * @param clazz 泛型类型
     * @return 返回对象
     */
    public static <T> T fromJson(String json, Class<T> clazz) {
    	return JSON.parseObject(json, clazz);
    }

    public static <T> List<T> fromJsonArray(String json, Class<T> clazz) {
        return JSON.parseArray(json, clazz);
    }

    public static <T> List<T> fromJsonArray(JSONArray jsonArr, Class<T> clazz) {
        return JSON.parseArray(jsonArr.toJSONString(), clazz);
    }

    public static <T> JSONObject toJSONObject(T obj) {
    	return (JSONObject) JSON.toJSON(obj);
    }

    public static JSONObject toJSONObject(String json) {
    	return JSON.parseObject(json);
    }

    public static <T> JSONArray toJSONArray(T obj) {
    	return (JSONArray) JSON.toJSON(obj);
    }

    /**
     * 将对象转换成json
     * <p/>
     *
     * @param obj 对象
     * @return 返回json字符串
     */
    public static <T> String toJson(T obj) {
    	return JSON.toJSONString(obj);
    }
}
